/*
 * UMediaReader.h
 *
 *  Created on: 2020年3月29日
 *      Author: chuanjiang.zh
 */

#ifndef UMEDIAREADER_H_
#define UMEDIAREADER_H_

#include "UMediaFormat.h"
#include "UMediaPacket.h"


class DLLEXPORT UMediaReader
{
public:
	virtual ~UMediaReader() {}

	/**
	 * 打开
	 * @param url		媒体路径
	 * @param params	参数
	 * @return 0 表示成功
	 */
	virtual int open(const char* url, const char* params) =0;

	virtual void close() =0;

	virtual bool isOpen() =0;

	/**
	 * 获取媒体格式
	 * @param fmt
	 * @return
	 */
	virtual bool getFormat(UMediaFormat& fmt) =0;

	/**
	 * 获取媒体时长, 单位为毫秒
	 * @return
	 */
    virtual int getDuration() =0;

	virtual bool play() =0;

	virtual bool pause() =0;

	virtual void stop() =0;

	virtual int getState() =0;

	/**
	 * 判断是否可定位
	 * @return true 表示可定位
	 */
	virtual bool seekable() =0;

	/**
	 * 定位到指定时间点
	 * @param offset    时间点，单位为 1/1000 毫秒，不应超过 duration
	 * @return
	 */
	virtual bool seek(int64_t offset) =0;

	/**
	 * 获取当前已播放时长
	 * @return 播放时间，单位为毫秒
	 */
	virtual int64_t getTime() =0;

	/**
	 * 设置播放速度，正常播放速度为 1.0
	 * @param scale 播放速度，取值范围: [1/8, 8]
	 * @return
	 */
	virtual bool setScale(float scale) =0;

	virtual float getScale() =0;

	/**
	 * 读取媒体包
	 * @param pkt
	 * @return	0 表示成功
	 */
	virtual int read(UMediaPacket& pkt) =0;

	/**
	 * 中断读取操作
	 */
    virtual void interrupt() =0;

    /**
     * 是否是实时流.
     * @return
     */
    virtual bool isLive() =0;


	virtual const char* getFormatName() =0;

	virtual size_t getMetaData(const char* name, char* value, size_t size)
	{
		return 0;
	}

};



#endif /* UMEDIAREADER_H_ */
